package com.stq.toutiao.api;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.stq.toutiao.model.response.TouTiaoCode2Session;
import com.stq.toutiao.model.request.TouTiaoCode2SessionParam;

import java.util.HashMap;
import java.util.Map;

import static com.stq.toutiao.config.TouTiaoUrlConfig.CODE2SESSION_URL;
import static com.stq.toutiao.model.response.TouTiaoErrCodeEnum.ERRCODE_NEGATIVE_1;
import static com.stq.toutiao.model.response.TouTiaoErrCodeEnum.ERRCODE_NEGATIVE_2;

/**
 * 1)通过login接口获取到登录凭证后，开发者可以通过服务器发送请求的方式获取session_key和openId <br/>
 * 注意：登录凭证 code，anonymous_code 只能使用一次，<br/>
 * 非匿名需要 code，非匿名下的 anonymous_code 用于数据同步，匿名需要 anonymous_code
 *
 * @author stqsht@163.com
 * @date 2020-01-23 17:47
 */
public class TouTiaoCode2SessionApi {
    /**
     * code换session
     *
     * @param param
     * @return
     */
    public TouTiaoCode2Session getCode2Session(TouTiaoCode2SessionParam param) {
        boolean b = StrUtil.isEmpty(param.getCode()) && StrUtil.isEmpty(param.getAnonymousCode());
        if (param == null || StrUtil.isEmpty(param.getAppid())
                || StrUtil.isEmpty(param.getSecret()) || b) {
            return new TouTiaoCode2Session(ERRCODE_NEGATIVE_2.getErrcode(), ERRCODE_NEGATIVE_2.getErrmsg());
        }
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("appid", param.getAppid());
        params.put("secret", param.getSecret());
        if (StrUtil.isNotEmpty(param.getCode())) {
            params.put("code", param.getCode());
        }
        if (StrUtil.isNotEmpty(param.getAnonymousCode())) {
            params.put("anonymous_openid", param.getAnonymousCode());
        }
        String s = HttpUtil.get(CODE2SESSION_URL, params);
        if (StrUtil.isEmpty(s)) {
            return new TouTiaoCode2Session(ERRCODE_NEGATIVE_1.getErrcode(), ERRCODE_NEGATIVE_1.getErrmsg());
        }
        return JSONObject.parseObject(s, TouTiaoCode2Session.class);

    }
}
